# 过滤器 使用过滤器后会返回一个filter object


def is_odd(nm):
    return nm % 2 == 1


print(list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])))


def not_empty(s):
    return s and s.strip()  # 可以去除空字符


print(list(filter(not_empty, ['A', '', '    B      ', None, 'C', '  '])))
print('   a' and '    a'.strip())
# 计算素数的一个方法是埃氏筛法


def _odd_iter():  # 生成器
    nn = 1
    while True:
        nn = nn + 2
        yield nn


def _not_divisible(m):  # 筛选当前数值的整倍数
    return lambda x: x % m > 0


def primes():
    yield 2
    it = _odd_iter()  # 初始序列
    while True:
        k = next(it)  # 返回序列的第一个数
        yield k
        it = filter(_not_divisible(k), it)  # 构造新序列


for n in primes():
    if n < 1000:
        print(n)
    else:
        break

